#ifndef ACCOUNT_SYSTEM_TRANSACTION_H
#define ACCOUNT_SYSTEM_TRANSACTION_H

#include <string>
#include <chrono>
#include <ctime>
#include <iomanip>
#include <sstream>
using namespace std;
// 交易类型枚举
enum class TransactionType
{
    DEPOSIT,    // 存款
    WITHDRAWAL, // 取款
    TRANSFER    // 转账
};

// 交易类，用于记录银行系统中的各种交易操作
class Transaction
{
private:
    string transactionId;        // 交易ID
    TransactionType type;             // 交易类型
    string sourceAccountId;      // 源账户ID
    string destinationAccountId; // 目标账户ID（非转账交易为空）
    double amount;                    // 交易金额
    string note;                 // 交易备注
    time_t timestamp;            // 交易时间戳

    static int nextTransactionNumber; // 静态变量，用于生成唯一交易编号

public:
    // 交易构造函数，初始化交易类型、源账户、目标账户、金额和备注
    Transaction(
        TransactionType transType,
        const string &sourceAccId,
        const string &destAccId,
        double transAmount,
        const string &transNote = "");

    // 获取方法
    string getTransactionId() const;          // 获取交易ID
    TransactionType getType() const;               // 获取交易类型
    string getSourceAccountId() const;        // 获取源账户ID
    string getDestinationAccountId() const;   // 获取目标账户ID
    double getAmount() const;                      // 获取交易金额
    string getNote() const;                   // 获取交易备注
    time_t getTimestamp() const;              // 获取交易时间戳

    // 实用方法
    string getTypeAsString() const;           // 将交易类型转换为字符串
    string getFormattedTimestamp() const;     // 获取格式化的时间戳
    string toString() const;                  // 获取交易的字符串表示

    // 静态方法，用于生成唯一的交易ID
    static string generateTransactionId();
};

#endif // ACCOUNT_SYSTEM_TRANSACTION_H